import { _decorator, Component, log, input,Input,Node, Collider, Label, Button, director, Prefab, instantiate } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('plarer')
export class plarer extends Component {

    @property(Button)
    Tips_Button:Button=null; // 按钮

    @property(Label)
    Tips_Label:Label=null; //提示文字

    @property(Label)
    Begin_Label:Label=null; //开始倒计时

    @property(Node)
    Player_Node:Node=null; // 赛车自身节点

    @property(Prefab)
    Car_Prefab:Prefab=null; //障碍物汽车 预制体

    @property(Node)
    Car_Prefab_Node:Node=null; //障碍物汽车 预制体

    @property
    Player_speed=30; //速度

    @property
    boundary_zuo=30; //左边界
    @property
    boundary_you=30; //右边界

    @property(Node)
    C_Node : Node=null;  //摄像机节点

    @property(Node)
    Tips : Node=null; //提示节点
    @property(Node)
    Begin_node : Node=null; //倒计时节点
    @property(Node)
    Button_node : Node=null; //按钮节点


    Player_move={a:false,d:false};
    Player_Collider: Collider=null // 赛车自身节点的碰撞组件

    Car_Node: Node=null // 障碍物小汽车节点

    Move=true; //移动开关

    private countdownTime: number = 3;


    start() {
        this.Move=false;
        this.Tips.active=true; 
        this.Button_node.active=false;
        this.startCountdown();
        this.Car_Node = instantiate(this.Car_Prefab); //把预制体生成为节点
        this.Car_Node.setParent(this.Car_Prefab_Node);
        this.Car_Node.setScale(5,5,5)
        this.Car_Node.setPosition(0,1,-400)
        
    }
    startCountdown() {
        // 使用schedule函数每秒执行一次updateCountdown方法
                    //回调函数              时间间隔   重复次数          延时          
        this.schedule(this.updateCountdown, 1, this.countdownTime , 0);
    }

    updateCountdown() {
        // 更新倒计时文本
        if(this.countdownTime === 1){
            this.Begin_Label.string = "GO";
        }else 
        // 如果倒计时结束，取消schedule
        if (this.countdownTime === 0) {
           
            this.unschedule(this.updateCountdown);
            // 在这里可以执行倒计时结束后的操作
            this.Move=true;
            this.Tips.active=false; 
            this.Button_node.active=true;
            this.Begin_node.active=false;
            console.log("倒计时结束")
        }else{
            this.Begin_Label.string = (this.countdownTime-1).toString();
        }
        // 减少倒计时时间
        this.countdownTime--;
    }
    // 监听碰撞触发类型  onTriggerEnter 开始触发
    // 监听碰撞触发类型  onTriggerStay 持续触发
    // 监听碰撞触发类型  onTriggerExit 结束触发
    protected onLoad(): void {
        input.on(Input.EventType.KEY_DOWN , this.Key_down , this );
        input.on(Input.EventType.KEY_UP , this.Key_Up , this );
        this.Player_Collider= this.Player_Node.getComponent(Collider); //获取节点组件
        this.Player_Collider.on('onTriggerEnter',this.Start_Collide,this);
    }
    protected onDestroy(): void {
        //  该输入类管理所有的输入事件，包括：触摸、鼠标、加速计、游戏手柄、6DOF手柄、头戴显示器 和 键盘。
        input.off(Input.EventType.KEY_DOWN , this.Key_down,this);
        input.off(Input.EventType.KEY_UP , this.Key_Up , this );
        this.Player_Collider.off('onTriggerEnter',this.Start_Collide,this);
    }

    New_Game(Button,e){
        director.loadScene("c1") // 加载场景/切换场景  
        console.log("game over")
        console.log(Button)
        console.log(e)

    }

    //碰撞后执行函数
    Start_Collide(C){
        console.log(C.otherCollider.node.name);
        if(C.otherCollider.node.name == 'win'){
            this.Tips.active=true; 
            this.Tips_Label.string="成功了"
            console.log(this.Tips);
            
        }else{
            this.Tips_Label.string="失败了"
            this.Tips.active=true; 
        }
        this.Move=false;
        // this.Tips.destroy();// 销毁节点
        // this.Tips.active=true; 显示/隐藏
       
    }
    Key_down(key){
        if(key.keyCode== 65){
            this.Player_move.a=true;
        }
        
        if(key.keyCode== 68){
            this.Player_move.d=true;
        }
    }

    Key_Up(key){
        if(key.keyCode== 65){
            this.Player_move.a=false;
        }
        
        if(key.keyCode== 68){
            this.Player_move.d=false;
        }
    }
    update(deltaTime: number) {
        if(!this.Move){
            return;
        }

       


        const p_pos=this.node.getPosition();
        const c_pos=this.C_Node.getPosition();

        const car_pos= this.Car_Node.getPosition();

        const speed=deltaTime * this.Player_speed;
        const y=p_pos.y
        const z=p_pos.z - speed;
        const c_z=c_pos.z - speed;

        const car_z= car_pos.z+speed*2;
     
        if(this.Player_move.a && !this.Player_move.d){
            p_pos.x=p_pos.x - speed;
            
        }
        if(this.Player_move.d && !this.Player_move.a){
            p_pos.x=p_pos.x + speed;
           
        }

        // if(p_pos.x<=this.boundary_zuo){
        //     p_pos.x=this.boundary_zuo;
        // } if(p_pos.x>=this.boundary_you){
        //     p_pos.x=this.boundary_you;
        // }
        p_pos.x=Math.max(Math.min(p_pos.x,this.boundary_you),this.boundary_zuo)
        this.node.setPosition(p_pos.x,p_pos.y,z);
        this.C_Node.setPosition(c_pos.x,c_pos.y,c_z);
        this.Car_Node.setPosition(car_pos.x,car_pos.y,car_z)
    }
}


